// GNU (L)GPLv3+ here.

#ifndef MaxsiEntity_H
#define MaxsiEntity_H

BeginMaxsiNamespace

#define MAXSI_ENTITY_SUPPORTS_DRAW		(1<<0)
#define MAXSI_ENTITY_SUPPORTS_UPDATE	(1<<1)
#define MAXSI_ENTITY_SUPPORTS_PHYSICS	(1<<2)

class MaxsiEntity
{
public:
	size_t	DrawListThreadId;
	size_t	DrawListOffset;

public:
	virtual FLAGSL32 GetCapabilities();

public:
	virtual MaxsiError CommitDrawData(size_t ThreadId);
	virtual MaxsiError Draw();

public:
	virtual MaxsiError Update();

public:
	virtual MaxsiError SimulatePhysics();

};

class MaxsiPropPhysics : public MaxsiEntity
{
public:
	MaxsiPropPhysics();
	virtual ~MaxsiPropPhysics();

public:
	Vec3 Location;
	Vec3 Velocity;
	Vec3 Acceleration;
	Vec3 Rotation;
	Vec3 RotationalVelocity;
	Vec3 RotationalAcceleration;
	float Mass;

public:
	virtual FLAGSL32 GetCapabilities();

public:
	virtual MaxsiError CommitDrawData(size_t ThreadId);
	virtual MaxsiError Draw();

public:
	virtual MaxsiError Update();

public:
	virtual MaxsiError SimulatePhysics();

};



EndMaxsiNamespace

#endif
